﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using System.Data;
using System.IO;
using System.Configuration;
using System.Transactions;
using System.Data.Linq;
using System.ComponentModel;
using UtilityExtensions;

namespace BOL.Empresa
{
    public class GetProyectoVentaList
    {
        int _count;



        public int Count(string tipoActividadStr,
                            int idEmpresa,
                            string proyectoStr,
                           bool bitVerAnula,
                             int startRowIndex,
                              int maximumRows,
                              string sortExpression)
        {
            return _count;
        }



        private IQueryable<ProyectoVentaListInfo> ApplySelect_ProyectoListInfo()
        {
            var q = from a in DbUtil.Db.Proyectos
                    select new ProyectoVentaListInfo
                    {
                       idInternal=a.idInternal,
                       actividadStr=a.TipoProyecto.descripcion,
                       bitActivo=a.bitActivo,
                       codigo=a.codigo,
                       descripcion=a.descripcion,
                       proyectoTipo=a.GrupoDatoitem.descripcion,
                       idActividad = a.idActividad.Value,   //para este caso de 
                       idProyectoTipo=a.idProyectoTipo,
                       numPartida=a.numPartida,
                       web=a.web,
                       fechaFin=a.fechaFin.Value,
                       fechaInicio=a.fechaInicio.Value,
                       fechaInicioStr=a.fechaInicio.Value.ToShortDateString(),
                       fechaFinStr=a.fechaFin.Value.ToShortDateString(),
                       area=a.area.Value,
                       areaStr=String.Format("{0}",a.area),
                       sede=a.sede,
                       idEmpresa=a.idEmpresa.Value
                       };
            return q;
        }
        private IQueryable<ProyectoVentaListInfo> ApplySort(IQueryable<ProyectoVentaListInfo> q, string sortExpression)
        {
            switch (sortExpression)
            {
                case "actividadStr":
                    q = q.OrderBy(b => b.actividadStr);
                    break;
                case "actividadStr DESC":
                    q = q.OrderByDescending(b => b.actividadStr);
                    break;

                case "bitActivo":
                    q = q.OrderBy(b => b.bitActivo);
                    break;
                case "bitActivo DESC":
                    q = q.OrderByDescending(b => b.bitActivo);
                    break;

                case "codigo":
                    q = q.OrderBy(b => b.codigo);
                    break;
                case "codigo DESC":
                    q = q.OrderByDescending(b => b.codigo);
                    break;


                case "descripcion":
                    q = q.OrderBy(b => b.descripcion);
                    break;
                case "descripcion DESC":
                    q = q.OrderByDescending(b => b.descripcion);
                    break;


                case "proyectoTipo":
                    q = q.OrderBy(b => b.proyectoTipo);
                    break;
                case "proyectoTipo DESC":
                    q = q.OrderByDescending(b => b.proyectoTipo);
                    break;


                case "numPartida":
                    q = q.OrderBy(b => b.numPartida);
                    break;
                case "numPartida DESC":
                    q = q.OrderByDescending(b => b.numPartida);
                    break;

                case "fechaInicio":
                    q = q.OrderBy(b => b.fechaInicio);
                    break;
                case "fechaInicio DESC":
                    q = q.OrderByDescending(b => b.fechaInicio);
                    break;

                case "fechaFin":
                    q = q.OrderBy(b => b.fechaFin);
                    break;
                case "fechaFin DESC":
                    q = q.OrderByDescending(b => b.fechaFin);
                    break;


                case "sede":
                    q = q.OrderBy(b => b.sede);
                    break;
                case "sede DESC":
                    q = q.OrderByDescending(b => b.sede);
                    break;

                case "area":
                    q = q.OrderBy(b => b.area);
                    break;
                case "area DESC":
                    q = q.OrderByDescending(b => b.area);
                    break;


               
                default:
                    q = q.OrderByDescending(b => b.descripcion).OrderByDescending(p => p.codigo);
                    break;
            }
            return q;
        }



        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public IEnumerable<ProyectoVentaListInfo> Execute(string tipoActividadStr,
                                                            int idEmpresa,
                                                           bool bitVerAnula,
                                                           string proyectoStr,
                                                           int startRowIndex,
                                                           int maximumRows,
                                                           string sortExpression)
        {

            //para este caso el tipo de proyecto es el tipo de actividad
            //por empresa
            //int idEmpresa = (int)System.Web.HttpContext.Current.Session["login.Empresa.idEmpresa"];

            if (!proyectoStr.HasValue())
                proyectoStr = "";

            var q = ApplySelect_ProyectoListInfo();


            q = q.Where(a => (a.bitActivo == true | a.bitActivo == !bitVerAnula)
                              & a.descripcion.Contains(proyectoStr)
                              & a.idProyectoTipo==50
                             & (idEmpresa==0? a.idEmpresa!=0:a.idEmpresa==idEmpresa)
                              & (tipoActividadStr == "0" ? a.idActividad != 0 : a.idActividad == Convert.ToInt32(tipoActividadStr)));




            _count = q.Count();

            q = ApplySort(q, sortExpression);
            return q.Skip(startRowIndex).Take(maximumRows);
        }



    }
}
